package cn.iocoder.yudao.module.system.controller.admin.mini.other.file.vo;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.comm.ResponseMessage;
import com.aliyun.oss.model.PutObjectResult;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class OssUtil {


    static String  accessKeyId="LTAI4Fo3YwTEREuRmxCtMLNy";
    static String accessKeySecret="c3jiJsAJtWhVJyK7RD6dVN4mhTHFw3";
    static String endpoint="oss-cn-beijing.aliyuncs.com";
    static String bucketName="jockers";
    static String bucketDomain="oss-cn-beijing.aliyuncs.com";

    /**
     * oss完成文件上传
     * @return
     */
    public static String uploadFileToOss(File file) throws FileNotFoundException {
        InputStream inputStream = new FileInputStream(file);
        String originalName=file.getName();

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 生成上传文件的目录
        String folderName = new SimpleDateFormat("yyyyMMdd").format(new Date());

        // 生成上传文件在OSS服务器上保存时的文件名
        // 原始文件名：beautfulgirl.jpg
        // 生成文件名：wer234234efwer235346457dfswet346235.jpg
        // 使用UUID生成文件主体名称
        String fileMainName = UUID.randomUUID().toString().replace("-", "");

        // 从原始文件名中获取文件扩展名
        String extensionName = originalName.substring(originalName.lastIndexOf("."));

        // 使用目录、文件主体名称、文件扩展名称拼接得到对象名称
        String objectName = folderName + "/" + fileMainName + extensionName;

        try {
            // 调用OSS客户端对象的方法上传文件并获取响应结果数据
            PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream);

            // 从响应结果中获取具体响应消息
            ResponseMessage responseMessage = putObjectResult.getResponse();

            // 根据响应状态码判断请求是否成功
            if (responseMessage == null) {

                // 拼接访问刚刚上传的文件的路径
                String ossFileAccessPath = "https://jockers."+bucketDomain + "/" + objectName;

                // 当前方法返回成功
                return ossFileAccessPath;
            } else {
                // 获取响应状态码
                int statusCode = responseMessage.getStatusCode();

                // 如果请求没有成功，获取错误消息
                String errorMessage = responseMessage.getErrorResponseAsString();

                // 当前方法返回失败
                return "当前响应状态码=" + statusCode + " 错误消息=" + errorMessage;
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {

            if (ossClient != null) {

                // 关闭O SSClient。
                ossClient.shutdown();
            }
        }
        return "";
    }

    /**
     * 根据文件名返回固定的url
     * @return
     */
    public static String uploadFileToOss1(File file) throws FileNotFoundException {
        InputStream inputStream = new FileInputStream(file);
        String originalName=file.getName();

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);


        try {
            // 调用OSS客户端对象的方法上传文件并获取响应结果数据
            PutObjectResult putObjectResult = ossClient.putObject(bucketName, originalName, inputStream);

            // 从响应结果中获取具体响应消息
            ResponseMessage responseMessage = putObjectResult.getResponse();

            // 根据响应状态码判断请求是否成功
            if (responseMessage == null) {

                // 拼接访问刚刚上传的文件的路径
                String ossFileAccessPath = "https://jockers."+bucketDomain + "/" + originalName;

                // 当前方法返回成功
                return ossFileAccessPath;
            } else {
                // 获取响应状态码
                int statusCode = responseMessage.getStatusCode();

                // 如果请求没有成功，获取错误消息
                String errorMessage = responseMessage.getErrorResponseAsString();

                // 当前方法返回失败
                return "当前响应状态码=" + statusCode + " 错误消息=" + errorMessage;
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {

            if (ossClient != null) {

                // 关闭O SSClient。
                ossClient.shutdown();
            }
        }
        return "";
    }

    public static void main(String[] args) throws ParseException, FileNotFoundException {
        File file = new File("C:\\Users\\123\\Pictures\\b0f4798f597731802f969306e6fd4d1.jpg");
        System.err.println(uploadFileToOss(file));
    }

}
